﻿using System;
using HolidayChecker.Easter;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace HolidayCheckerTests
{
    /// <summary>
    /// Summary description for UnitTest1
    /// </summary>
    [TestClass]
    public class EasterTest
    {
        // Selettore della classe da utilizzare per il calcolo
        // del giorno di Pasqua
        EasterAlgorithmSelector easterSelector;

        public EasterTest()
        {
            // Istanziazione del selettore
            this.easterSelector = new EasterAlgorithmSelector();
            
        }

        private TestContext testContextInstance;

        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Additional test attributes
        //
        // You can use the following additional attributes as you write your tests:
        //
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        /// <summary>
        /// Funzione per il test dell'algoritmo di OudinTondering per il calcolo del
        /// giorno di Pasqua.
        /// Questo test richiede il calcolo del giorno di Pasqua per il 2010.
        /// Il risultato atteso è 4 Aprile 2010
        /// </summary>
        [TestMethod]
        public void TestMethodGetEasterDateOudin2010()
        {
            // Risultato atteso (4 Aprile 2010)
            DateTime expected = new DateTime(
                2010,
                4,
                4);

            // Esecuzione del calcolo del giorno di Pasqua
            // con l'algoritmo di OudinTondering per l'anno 2010
            DateTime easterDate = this.easterSelector.GetEasterDate(
                EasterAlgorithmEnum.OudinTondering, 
                2010);

            // La data restituita deve essere 4 Aprile 2010
            Assert.AreEqual(expected, easterDate);
            
        }

        /// <summary>
        /// Funzione per il test dell'algoritmo di OudinTondering per il calcolo del
        /// giorno di Pasqua.
        /// Questo test richiede il calcolo del giorno di Pasqua per il 2011.
        /// Il risultato atteso è 4 Aprile 2010
        /// </summary>
        [TestMethod]
        public void TestMethodGetEasterDateOudin2011()
        {
            // Risultato atteso (4 Aprile 2010)
            DateTime expected = new DateTime(
                2011,
                4,
                24);

            // Esecuzione del calcolo del giorno di Pasqua
            // con l'algoritmo di OudinTondering per l'anno 2010
            DateTime easterDate = this.easterSelector.GetEasterDate(
                EasterAlgorithmEnum.OudinTondering,
                2011);

            // La data restituita deve essere 4 Aprile 2010
            Assert.AreEqual(expected, easterDate);

        }
    }
}
